<% this.title = '帮助' %>
<% include header %>
<div class="padding">
    <h1 class="ui center aligned header">帮助</h1>
    <div style="font-content">
        <h2 class="ui header">评测</h2>
        <p>
            C++ 使用 <code>clang++</code> 或 <code>g++</code> 编译，命令形如 &nbsp;<code>clang++/g++ source_file.cpp -o exec_file -O2 -lm -DONLINE_JUDGE -mx32 -std=c++03</code>（对于 C++ 11 和 C++ 17，替换命令中的 <code>-std=</code> 参数）；
            <br> C 使用 <code>clang</code> 编译，命令为 &nbsp;<code>clang source_file.c -o exec_file -O2 -lm -DONLINE_JUDGE -mx32</code>；
            <br> Pascal 使用 <code>fpc</code> 编译，命令为 &nbsp;<code>fpc source_file.pas -O2</code>。
            <br> Java 编译时会自动检测您的代码中 <code>public class</code>，如果您的代码中没有 <code>public class</code>，请将入口类命名为 <code>Main</code>。
            <br> C# 使用 Mono 平台的编译器与运行环境。
            <br>
        </p>
        <p>请根据题目中的说明选择使用<strong>标准输入输出</strong>或<strong>文件输入输出</strong>。</p>

        <h2 class="ui header">个人资料<br></h2>
        <p>本站不提供头像存储服务，而是使用 Gravatar 进行头像显示。请使用邮箱注册 <a href="https://zh-cn.wordpress.com/">WordPress.com</a>，登录 <a href="https://cn.gravatar.com/">Gravatar</a> 并上传头像。同样使用 Gravatar 的 OJ 有 Vijos、COGS、UOJ 等。</p>
        <p>个性签名可以使用 Markdown 与 HTML，请不要在其中添加恶意代码。</p>
        <h2 class="ui header">添加题目</h2>
        <h3 class="ui header">题面</h3>
        <p>在<a href="/problem/0/edit">添加题目页面</a>填写题面，题目内容使用 Markdown 与 TeX 公式。</p>
        <h3 class="ui header">测试数据</h3>
<p>旧版的 <code>data_rule.txt</code> 已经停止使用，新加入的题目请使用新的 <code>data.yml</code> 配置文件。关于 YAML，详见 <a href="https://zh.wikipedia.org/wiki/YAML">YAML 的 Wikipedia 词条</a>。</p>
<p>对于传统和提交答案题目，<code>data.yml</code> 是可选的，系统会自动识别您的数据包，将每个 <code>.in</code> 文件对应到 <code>.out</code> 或 <code>.ans</code> 文件，并将 <code>spj_</code> 开头的文件作为 Special Judge（详见下文的「Special Judge」）。</p>
<h4>传统</h4>
<p>对于传统题目，<code>data.yml</code> 的格式如下：</p>
<div class="ui existing segment"><pre style="margin-top: 0; margin-bottom: 0; "><code class="lang-yaml"><span class="pl-l-Scalar-Plain">subtasks</span><span class="pl-p-Indicator">:</span>
  <span class="pl-p-Indicator">-</span> <span class="pl-l-Scalar-Plain">score</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">30</span>              <span class="pl-c1"># 这个子任务的分数（注意，所有子任务的总分必须为 100）</span>
    <span class="pl-l-Scalar-Plain">type</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">sum</span>              <span class="pl-c1"># 子任务类型，可选的值有 sum、min 和 mul.</span>
    <span class="pl-l-Scalar-Plain">cases</span><span class="pl-p-Indicator">:</span> <span class="pl-p-Indicator">[</span><span class="pl-nv">1</span><span class="pl-p-Indicator">,</span> <span class="pl-nv">2</span><span class="pl-p-Indicator">,</span> <span class="pl-nv">3</span><span class="pl-p-Indicator">]</span>       <span class="pl-c1"># 测试点编号可为数字</span>
  <span class="pl-p-Indicator">-</span> <span class="pl-l-Scalar-Plain">score</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">30</span>              <span class="pl-c1"># 另一个子任务</span>
    <span class="pl-l-Scalar-Plain">type</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">mul</span>
    <span class="pl-l-Scalar-Plain">cases</span><span class="pl-p-Indicator">:</span> <span class="pl-p-Indicator">[</span><span class="pl-s">'4'</span><span class="pl-p-Indicator">,</span> <span class="pl-s">'5'</span><span class="pl-p-Indicator">,</span> <span class="pl-s">'6'</span><span class="pl-p-Indicator">]</span> <span class="pl-c1"># 测试点编号也可为字符串</span>

<span class="pl-l-Scalar-Plain">inputFile</span><span class="pl-p-Indicator">:</span> <span class="pl-s">'dat#.in'</span>   <span class="pl-c1"># 测试数据包中的输入文件</span>
<span class="pl-l-Scalar-Plain">outputFile</span><span class="pl-p-Indicator">:</span> <span class="pl-s">'dat#.ans'</span> <span class="pl-c1"># 测试数据包中的输出文件</span>
<span class="pl-c1"># 上述文件名中的 # 字符将被替换为测试点编号</span>

<span class="pl-c1"># 可选 - Special Judge</span>
<span class="pl-l-Scalar-Plain">specialJudge</span><span class="pl-p-Indicator">:</span>
  <span class="pl-l-Scalar-Plain">language</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">cpp</span>
  <span class="pl-l-Scalar-Plain">fileName</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">spj.cpp</span>

<span class="pl-c1"># 可选 - 附加源文件</span>
<span class="pl-c1"># 例如，给选手提供一个 C++ 头文件，选手可以引用它，调用您提供的代码。</span>
<span class="pl-c1"># 常用于封装交互库</span>
<span class="pl-l-Scalar-Plain">extraSourceFiles</span><span class="pl-p-Indicator">:</span>
  <span class="pl-p-Indicator">-</span> <span class="pl-l-Scalar-Plain">language</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">cpp</span>
    <span class="pl-l-Scalar-Plain">files</span><span class="pl-p-Indicator">:</span> <span class="pl-c1"># 这是一个数组</span>
     <span class="pl-p-Indicator">-</span> <span class="pl-l-Scalar-Plain">name</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">itlib_cpp.h</span>     <span class="pl-c1"># 数据包中的文件名</span>
       <span class="pl-l-Scalar-Plain">dest</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">interaction.h</span>   <span class="pl-c1"># 目标文件名，在编译时被放置在与选手程序的同一目录下</span>
  <span class="pl-p-Indicator">-</span> <span class="pl-l-Scalar-Plain">language</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">c</span> <span class="pl-c1"># 给不同的语言提供不同的附加源文件</span>
    <span class="pl-l-Scalar-Plain">files</span><span class="pl-p-Indicator">:</span>
      <span class="pl-p-Indicator">-</span> <span class="pl-l-Scalar-Plain">name</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">itlib_c.h</span>
        <span class="pl-l-Scalar-Plain">dest</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">interaction.h</span>
</code></pre></div>
<h4>提交答案</h4>
<p>对于提交答案题目，<code>inputFile</code> 和 <code>outputFile</code> 可以省略，用 <code>userOutput</code> 表示用户提交的答案文件名。</p>
<div class="ui existing segment"><pre style="margin-top: 0; margin-bottom: 0; "><code class="lang-yaml"><span class="pl-l-Scalar-Plain">userOutput</span><span class="pl-p-Indicator">:</span> <span class="pl-s">'dat#.out'</span>
</code></pre></div>
<h4>交互</h4>
<p>对于交互题目，需要加入以下内容：</p>
<div class="ui existing segment"><pre style="margin-top: 0; margin-bottom: 0; "><code class="lang-yaml"><span class="pl-c1"># 交互器</span>
<span class="pl-l-Scalar-Plain">interactor</span><span class="pl-p-Indicator">:</span>
  <span class="pl-l-Scalar-Plain">language</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">cpp</span>
  <span class="pl-l-Scalar-Plain">fileName</span><span class="pl-p-Indicator">:</span> <span class="pl-l-Scalar-Plain">interactor.cpp</span>
</code></pre></div>
<p>交互器和选手程序同时运行，交互器的标准输入和标准输出连接了选手程序的标准输出和标准输入 —— 交互通过输入输出进行。</p>
<p>交互器运行时，其目录下会有 <code>input</code> 文件，表示该测试点的输入文件。交互器运行结束后，需要将选手得分写入 <code>score.txt</code> 文件中，并将提供给用户的额外信息输出到标准错误输出（<code>stderr</code>）中。</p>
<p>如果您希望实现 NOI 试题风格的交互（选手通过函数调用与交互器交互），请编写一些头文件作为「附加源文件」并封装标准输入输出的交互。</p>
<h4>子任务</h4>
<p>子任务是一组测试点的集合，一个子任务的分数由其包含的测试点的分数计算而来，具体的计算方式根据子任务类型而定：</p>
<ul>
<li><code>sum</code>：测试点分数按百分比相加；</li>
<li><code>mul</code>：测试点分数按百分比相乘；</li>
<li><code>min</code>：取各测试点最低分。</li>
</ul>
<h4>Special Judge</h4>
<p>Special Judge 用于<strong>传统</strong>或<strong>提交答案</strong>题目。</p>
<p>如果您没有编写 <code>data.yml</code>，请在数据包中添加 <code>spj_LANG.xxx</code>，其中 <code>xxx</code> 为任意后缀名，<code>LANG</code> 为所用语言的简称。</p>
<p>Special Judge 程序运行时，其目录下会有四个文件 <code>input</code>、<code>user_out</code>、<code>answer</code>、<code>code</code>，分别对应该测试点的输入文件、用户输出、该测试点的输出文件、用户的代码（对于非提交答案题目）。</p>
<p>Special Judge 程序运行完成后，应将该测试点的得分输出到标准输出（<code>stdout</code>）中（范围为 <code>0</code> 到 <code>100</code>，将自动折合为测试点分数），并将提供给用户的额外信息输出到标准错误输出（<code>stderr</code>）中。</p>
<h4>语言简称</h4>
<p>配置数据时，描述 Special Judge 或交互器的语言时使用语言的简称，它们是 <code>c</code>、<code>cpp</code>、<code>cpp11</code>、<code>cpp17</code>、<code>cpp11-clang</code>、<code>cpp17-clang</code>、<code>csharp</code>、<code>haskell</code>、<code>java</code>、<code>nodejs</code>、<code>pascal</code>、<code>python2</code>、<code>python3</code>、<code>ruby</code>。</p>
    </div>
</div>
<% include footer %>
